package com.aop.utils;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.util.Date;
import java.util.Map;

/**
 * @author wzm
 * @create 2023-10-13 10:24
 * project_name:stu_sys
 */
//生成和解析JWT的工具类
public class JwtUtils {

    private static final String key = "zhangsan";
    private static final Long time = 3600000L;

    /**
     * 生成jwt令牌
     * @param claims 自定义需要携带的数据信息
     * @return 返回生成的jwt
     */
    public static String getJwt(Map<String,Object> claims){
        return Jwts.builder()
                .signWith(SignatureAlgorithm.HS256, key) //数字签名算法+秘钥
                .setClaims(claims) //携带自定义信息 载荷
                .setExpiration(new Date(System.currentTimeMillis() + time)) //设置有效期 1h
                .compact();//生成
    }

    /**
     * 解析jwt令牌
     * @param jwt jwt令牌字符串
     * @return 返回解析后的载荷部分 也就是存储的内容
     */
    public static Claims parserJwt(String jwt){
        return Jwts.parser().setSigningKey(key)
                .parseClaimsJws(jwt)
                .getBody();
    }
}
